package com.testfileupload.uploadimg.suanfa.leetcode;


import java.util.Arrays;

/**
 * 冒泡排序
 * 定义一个布尔变量 hasChange，用来标记每轮是否进行了交换。在每轮遍历开始时，将 hasChange 设置为 false。
 * <p>
 * 若当轮没有发生交换，说明此时数组已经按照升序排列，hashChange 依然是为 false。此时外层循环直接退出，排序结束。
 * 核心
 * i-1
 * j-i-1
 */
public class BubbleSort {
    public static void main(String[] args) {
        int[] a = new int[]{2, 3, 5, 8, 1, 6, 9};
        int[] bubblesort = bubblesort(a);
        Arrays.stream(bubblesort).forEach(e -> System.out.print(e+" "));
    }

    private static int[] bubblesort(int[] a) {
        boolean hasChange = true;
        for (int i = 0; i < a.length - 1 && hasChange; i++) {
            hasChange = false;
            for (int j = 0; j < a.length - i - 1; j++) {
                if (a[j] > a[j + 1]) {
                    swap(a, j, j + 1);
                    hasChange = true;
                }
            }
        }
        return a;
    }

    private static void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}
